60806040526001600d5534801561001557600080fd5b50604080518082018252600b81526a053617368696d69537761760ac1b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f6e521fa56bbffa3ca4b9a5d00f8c0ce2ea243cfcada51024662e3f9ad63483c2818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b03191633179055611cde806101096000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063c0c53b8b11610097578063d505accf11610071578063d505accf14610520578063dd62ed3e14610571578063f887ea401461059f578063fff6cae9146105a7576101a9565b8063c0c53b8b146104d8578063c45a015514610510578063d21220a714610518576101a9565b806389afcb44116100d357806389afcb441461045d57806395d89b411461049c578063a9059cbb146104a4578063ba9a7a56146104d0576101a9565b806370a08231146104095780637464fc3d1461042f5780637ecebe0014610437576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb5780635909c0d5146103d35780635a3d5493146103db5780636a627842146103e3576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105af565b005b6102446109bf565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c16109e6565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610a10565b604080519115158252519081900360200190f35b610339610a27565b604080516001600160a01b039092168252519081900360200190f35b61035d610a36565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610a3c565b61035d610ad0565b6103b5610af4565b6040805160ff9092168252519081900360200190f35b61035d610af9565b61035d610aff565b61035d610b05565b61035d600480360360208110156103f957600080fd5b50356001600160a01b0316610b0b565b61035d6004803603602081101561041f57600080fd5b50356001600160a01b0316610ed9565b61035d610eeb565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316610ef1565b6104836004803603602081101561047357600080fd5b50356001600160a01b0316610f03565b6040805192835260208301919091528051918290030190f35b6102446110e1565b61031d600480360360408110156104ba57600080fd5b506001600160a01b038135169060200135611101565b61035d61110e565b61023a600480360360608110156104ee57600080fd5b506001600160a01b038135811691602081013582169160409091013516611114565b6103396111a9565b6103396111b8565b61023a600480360360e081101561053657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356111c7565b61035d6004803603604081101561058757600080fd5b506001600160a01b03813581169160200135166113c9565b6103396113e6565b61023a6113f5565b600d546001146105fa576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600d558415158061060d5750600084115b6106485760405162461bcd60e51b8152600401808060200182810382526025815260200180611bef6025913960400191505060405180910390fd5b6000806106536109e6565b5091509150816001600160701b0316871080156106785750806001600160701b031686105b6106b35760405162461bcd60e51b8152600401808060200182810382526021815260200180611c386021913960400191505060405180910390fd5b60075460085460009182916001600160a01b039182169190811690891682148015906106f15750806001600160a01b0316896001600160a01b031614155b61073a576040805162461bcd60e51b8152602060048201526015602482015274556e697377617056323a20494e56414c49445f544f60581b604482015290519081900360640190fd5b86156107ec57886001600160a01b03166310d1e85c338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b1580156107d357600080fd5b505af11580156107e7573d6000803e3d6000fd5b505050505b6107f582611496565b935061080081611496565b92505050600089856001600160701b031603831161081f57600061082e565b89856001600160701b03160383035b9050600089856001600160701b031603831161084b57600061085a565b89856001600160701b03160383035b9050600082118061086b5750600081115b6108a65760405162461bcd60e51b8152600401808060200182810382526024815260200180611c146024913960400191505060405180910390fd5b60006108c86108b6846003611521565b6108c2876103e8611521565b90611584565b905060006108da6108b6846003611521565b90506108ff620f42406108f96001600160701b038b8116908b16611521565b90611521565b6109098383611521565b101561094b576040805162461bcd60e51b815260206004820152600c60248201526b556e697377617056323a204b60a01b604482015290519081900360640190fd5b5050610959848488886115d4565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600d55505050505050505050565b6040518060400160405280600b81526020016a053617368696d69537761760ac1b81525081565b6009546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610a1d338484611793565b5060015b92915050565b6007546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610abb576001600160a01b0384166000908152600260209081526040808320338452909152902054610a969083611584565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610ac68484846117f5565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b600a5481565b600b5481565b6000600d54600114610b58576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600d81905580610b686109e6565b506007549193509150600090610b86906001600160a01b0316611496565b600854909150600090610ba1906001600160a01b0316611496565b90506000610bb8836001600160701b038716611584565b90506000610bcf836001600160701b038716611584565b90506000610bdd87876118a3565b60005490915080610dca5760055460408051637cd07e4760e01b815290516000926001600160a01b031691637cd07e47916004808301926020929190829003018186803b158015610c2d57600080fd5b505afa158015610c41573d6000803e3d6000fd5b505050506040513d6020811015610c5757600080fd5b505190506001600160a01b03811615801590610c7d57506006546001600160a01b031633145b15610d4857806001600160a01b03166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b158015610cbb57600080fd5b505afa158015610ccf573d6000803e3d6000fd5b505050506040513d6020811015610ce557600080fd5b505199508915801590610cfa57506000198a14155b610d43576040805162461bcd60e51b81526020600482015260156024820152744261642064657369726564206c697175696469747960581b604482015290519081900360640190fd5b610dc4565b6001600160a01b03811615610d9d576040805162461bcd60e51b815260206004820152601660248201527526bab9ba103737ba103430bb329036b4b3b930ba37b960511b604482015290519081900360640190fd5b610db56103e86108c2610db08888611521565b6119e3565b9950610dc460006103e8611a34565b50610e0d565b610e0a6001600160701b038916610de18684611521565b81610de857fe5b046001600160701b038916610dfd8685611521565b81610e0457fe5b04611abe565b98505b60008911610e4c5760405162461bcd60e51b8152600401808060200182810382526028815260200180611c816028913960400191505060405180910390fd5b610e568a8a611a34565b610e6286868a8a6115d4565b8115610e8c57600954610e88906001600160701b0380821691600160701b900416611521565b600c555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600c5481565b60046020526000908152604090205481565b600080600d54600114610f51576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600d81905580610f616109e6565b506007546008549294509092506001600160a01b0390811691166000610f8683611496565b90506000610f9383611496565b30600090815260016020526040812054919250610fb088886118a3565b60005490915080610fc18487611521565b81610fc857fe5b049a5080610fd68486611521565b81610fdd57fe5b04995060008b118015610ff0575060008a115b61102b5760405162461bcd60e51b8152600401808060200182810382526028815260200180611c596028913960400191505060405180910390fd5b6110353084611ad6565b61103f858c611584565b945061104b848b611584565b935061105985858b8b6115d4565b81156110835760095461107f906001600160701b0380821691600160701b900416611521565b600c555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600d81905550915091565b60405180604001604052806004815260200163053414c560e41b81525081565b6000610a1d3384846117f5565b6103e881565b6005546001600160a01b0316331461116a576040805162461bcd60e51b81526020600482015260146024820152732ab734b9bbb0b82b191d102327a92124a22222a760611b604482015290519081900360640190fd5b600780546001600160a01b039485166001600160a01b031991821617909155600880549385169382169390931790925560068054919093169116179055565b6005546001600160a01b031681565b6008546001600160a01b031681565b42841015611211576040805162461bcd60e51b8152602060048201526012602482015271155b9a5cddd85c158c8e881156141254915160721b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa15801561132c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906113625750886001600160a01b0316816001600160a01b0316145b6113b3576040805162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b6113be898989611793565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b6006546001600160a01b031681565b600d54600114611440576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600d5560075461148f9061145e906001600160a01b0316611496565b600854611473906001600160a01b0316611496565b6009546001600160701b0380821691600160701b9004166115d4565b6001600d55565b600654604080516337bd5f3560e11b81523060048201526001600160a01b03848116602483015291516000939290921691636f7abe6a91604480820192602092909190829003018186803b1580156114ed57600080fd5b505afa158015611501573d6000803e3d6000fd5b505050506040513d602081101561151757600080fd5b505190505b919050565b600081158061153c5750508082028282828161153957fe5b04145b610a21576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610a21576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b0384118015906115f257506001600160701b038311155b611639576040805162461bcd60e51b8152602060048201526013602482015272556e697377617056323a204f564552464c4f5760681b604482015290519081900360640190fd5b60095463ffffffff42811691600160e01b9004811682039081161580159061166957506001600160701b03841615155b801561167d57506001600160701b03831615155b156116e8578063ffffffff166116a58561169686611b68565b6001600160e01b031690611b7a565b600a80546001600160e01b03929092169290920201905563ffffffff81166116d08461169687611b68565b600b80546001600160e01b0392909216929092020190555b600980546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166000908152600160205260409020546118189082611584565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546118479082611b9f565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f457600080fd5b505afa158015611908573d6000803e3d6000fd5b505050506040513d602081101561191e57600080fd5b5051600c546001600160a01b0382161580159450919250906119cf5780156119ca57600061195b610db06001600160701b03888116908816611521565b90506000611968836119e3565b9050808211156119c757600061198a6119818484611584565b60005490611521565b905060006119a38361199d866005611521565b90611b9f565b905060008183816119b057fe5b04905080156119c3576119c38782611a34565b5050505b50505b6119db565b80156119db576000600c555b505092915050565b60006003821115611a26575080600160028204015b81811015611a2057809150600281828581611a0f57fe5b040181611a1857fe5b0490506119f8565b5061151c565b811561151c57506001919050565b600054611a419082611b9f565b60009081556001600160a01b038316815260016020526040902054611a669082611b9f565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000818310611acd5781611acf565b825b9392505050565b6001600160a01b038216600090815260016020526040902054611af99082611584565b6001600160a01b03831660009081526001602052604081209190915554611b209082611584565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b03841681611b9757fe5b049392505050565b80820182811015610a21576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe556e697377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f494e5055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f4c4951554944495459556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e4544556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e544544a2646970667358221220765d4829935f9b436509ba9cfe32c9a1df638a3ce0aa63dd4f195cc7e4c2c2a064736f6c634300060c0033